home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2410 / 2410.xpi / chrome / content / foxmarks-uitools.js < prev    next >
Text File  |  2010-01-28  |  13KB  |  388 lines

  1. /* 
  2.  Copyright 2009 Foxmarks Inc.
  3.  
  4.  foxmarks-uitools.js: Various and sundry UI functions. 
  5.  
  6.  */
  7.  
  8. var Xmarks;
  9. if(Xmarks === undefined){
  10.     Xmarks = {};
  11. }
  12.  
  13. var Cc = Components.classes;
  14. var Ci = Components.interfaces;
  15. var CCon = Components.Constructor;
  16.  
  17. (function() {
  18. var xm = Xmarks;
  19.  
  20. xm.OpenWindowByType = function(inType, uri, features, args) {
  21.     var wm = Cc['@mozilla.org/appshell/window-mediator;1'].
  22.         getService(Ci.nsIWindowMediator);
  23.     var topWindow = wm.getMostRecentWindow(inType);
  24.  
  25.     if (topWindow) {
  26.         topWindow.focus();
  27.     } else {
  28.         topWindow = wm.getMostRecentWindow(null);
  29.         var win = topWindow.openDialog(uri, "_blank", features || "chrome",
  30.             args);
  31.     }
  32. };
  33.  
  34. xm.OpenInNewTabAuth = function(url, focus, auth){
  35.     var wm = Cc['@mozilla.org/appshell/window-mediator;1'].
  36.         getService(Ci.nsIWindowMediator);
  37.     var topWindow = wm.getMostRecentWindow('navigator:browser');
  38.     if (topWindow) {
  39.         var content = topWindow.document.getElementById('content');
  40.         if(auth !== undefined){
  41.             var pd = Cc["@mozilla.org/network/mime-input-stream;1"].
  42.                            createInstance(Ci.nsIMIMEInputStream);
  43.             pd.addHeader("Authorization", "XMAuth "+ auth);
  44.             pd.addHeader("X-Xmarks-Auth", auth);
  45.  
  46.             content.selectedTab =
  47.                 content.addTab(url, null,null , pd);
  48.         } else {
  49.             content.selectedTab =
  50.                 content.addTab(url);
  51.         }
  52.         if (focus) {
  53.             topWindow.focus();
  54.         }
  55.     }
  56. };
  57.  
  58. xm.OpenInNewTab = function(url, focus, postData) {
  59.     var wm = Cc['@mozilla.org/appshell/window-mediator;1'].
  60.         getService(Ci.nsIWindowMediator);
  61.     var topWindow = wm.getMostRecentWindow('navigator:browser');
  62.     if (topWindow) {
  63.         var content = topWindow.document.getElementById('content');
  64.         if(postData !== undefined){
  65.             var stringStream = Cc["@mozilla.org/io/string-input-stream;1"].
  66.                 createInstance(Ci.nsIStringInputStream);
  67.             var txt = postData.toJSONString();
  68.             if ("data" in stringStream) // Gecko 1.9 or newer
  69.                     stringStream.data = txt;
  70.             else // 1.8 or older
  71.                 stringStream.setData(txt, txt.length);
  72.                                
  73.             var pd = Cc["@mozilla.org/network/mime-input-stream;1"].
  74.                            createInstance(Ci.nsIMIMEInputStream);
  75.             pd.addHeader("Content-Type", "application/json");
  76.             pd.addContentLength = true;
  77.             pd.setData(stringStream);
  78.  
  79.             content.selectedTab =
  80.                 content.addTab(url, null,null , pd);
  81.         } else {
  82.             content.selectedTab =
  83.                 content.addTab(url);
  84.         }
  85.         if (focus) {
  86.             topWindow.focus();
  87.         }
  88.     }
  89. };
  90.  
  91. xm.OpenInNewWindow = function(url) {
  92.     openDialog("chrome://browser/content/browser.xul", "_blank",
  93.         "chrome,all,dialog=no", url);
  94. };
  95.  
  96. xm.OpenFoxmarksSettingsDialog = function(pane) {
  97.     xm.OpenWindowByType("foxmarks:settings",
  98.         "chrome://foxmarks/content/foxmarks-dialog.xul", 
  99.         "chrome,toolbar,centerscreen",
  100.         [pane || "foxmarks-mainpane"]);
  101. };
  102.  
  103. xm.MyFoxmarks = function() {
  104.     if(xm.gSettings.securityLevel == 1){
  105.         xm.OpenInNewTab("https://my.xmarks.com/", true);
  106.     } else {
  107.         xm.OpenInNewTab("http://my.xmarks.com/", true);
  108.     }
  109. };
  110.  
  111. xm.OpenWizard = function(manual, skipAuth) {
  112.     if (skipAuth) {
  113.         xm.OpenWindowByType("foxmarks:setup",
  114.             "chrome://foxmarks/content/foxmarks-setup.xul",
  115.             "chrome,centerscreen,dialog=no", manual);
  116.     } else {
  117.         xm.OpenWindowByType("foxmarks:login", 
  118.             "chrome://foxmarks/content/foxmarks-login.xul",
  119.             "chrome,centerscreen,dialog=no", manual);
  120.     }
  121. };
  122.  
  123. xm.OnWizardCancel = function() {
  124.     var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  125.         .getService(Components.interfaces.nsIPromptService);
  126.  
  127.     var checkResult = {};
  128.     checkResult.value = xm.gSettings.wizardSuppress;
  129.     var sb = xm.Bundle();
  130.  
  131.     var ret = ps.confirmCheck(window, sb.GetStringFromName("title.cancelsetup"),
  132.             sb.GetStringFromName("msg.cancelsetup"),
  133.             sb.GetStringFromName("msg.nowizard"),
  134.             checkResult);
  135.  
  136.     xm.gSettings.wizardSuppress = checkResult.value;
  137.     xm.gSettings.majorVersion = 3;
  138.  
  139.     return ret;
  140. };
  141.  
  142. xm.Synch = function() {
  143.     xm.PerformAction("synch");
  144. };
  145.  
  146. xm.PerformAction = function(action, arg) {
  147.     var retval = { helpurl: null };
  148.  
  149.     try {
  150.         var win = window.openDialog(
  151.             "chrome://foxmarks/content/foxmarks-progress.xul", "_blank",
  152.             "chrome,dialog,modal,centerscreen", action, retval, arg);
  153.         if (retval.helpurl) {
  154.             xm.OpenInNewWindow(retval.helpurl);   
  155.         }
  156.     } catch (e) {
  157.         // pass through
  158.     }
  159.     return retval.status;
  160. };
  161.  
  162. var XmarksDataServiceObserver = {
  163.     os: Cc["@mozilla.org/observer-service;1"].
  164.         getService(Ci.nsIObserverService),
  165.  
  166.     observe: function(subject, topic, data) {
  167.         var result = eval("(" + data + ")");
  168.         this.os.removeObserver(this, "foxmarks-dataservice");
  169.         if (this.spinner) {
  170.             this.spinner.hidden = true;
  171.         }
  172.         if (this.callback) {
  173.             var callback = this.callback;
  174.             this.callback = null;
  175.             callback(result);
  176.         }
  177.     },
  178.  
  179.     start: function(text, spinner, callback) {
  180.         this.os.addObserver(this, 
  181.                 "foxmarks-dataservice", false);
  182.         this.text = text;
  183.         this.spinner = spinner;
  184.         this.callback = callback;
  185.         if (this.spinner) {
  186.             this.spinner.hidden = false;
  187.         }
  188.     }
  189. };
  190. var XmarksServiceObserver = {
  191.     os: Cc["@mozilla.org/observer-service;1"].
  192.         getService(Ci.nsIObserverService),
  193.  
  194.     observe: function(subject, topic, data) {
  195.         var result = eval("(" + data + ")");
  196.         if (this.text) {
  197.             this.text.value = result.msg;
  198.         }
  199.         if (result.status != 1 && result.status != 3) {
  200.             this.os.removeObserver(this, "foxmarks-service");
  201.             if (this.spinner) {
  202.                 this.spinner.hidden = true;
  203.             }
  204.             if (this.callback) {
  205.                 var callback = this.callback;
  206.                 this.callback = null;
  207.                 callback(result);
  208.             }
  209.         }
  210.     },
  211.  
  212.     start: function(text, spinner, callback) {
  213.         this.os.addObserver(XmarksServiceObserver, "foxmarks-service", false);
  214.         this.text = text;
  215.         this.spinner = spinner;
  216.         this.callback = callback;
  217.         if (this.spinner) {
  218.             this.spinner.hidden = false;
  219.         }
  220.     }
  221. }
  222.  
  223. xm.TurboTagsCancel = function() {
  224.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  225.         getService(Ci.nsIFoxmarksService);
  226.     fms.datacancel();
  227. };
  228.  
  229. xm.FetchTurboTags = function(url, text, spinner, callback) {
  230.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  231.         getService(Ci.nsIFoxmarksService);
  232.     XmarksDataServiceObserver.start(text, spinner, callback);
  233.     if (!fms.getTurboTags(url)) {
  234.         callback({status: 2, msg: "Whoops! We're busy!" });
  235.     }
  236.     return true;
  237. };
  238.  
  239. xm.UpdateReview = function(url, url_id, rating, review, callback) {
  240.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  241.         getService(Ci.nsIFoxmarksService);
  242.     if (!fms.updateReview(url, url_id, rating, review)) {
  243.         callback({status: 2, msg: "Whoops! We're busy!" });
  244.     }
  245.     return true;
  246. };
  247.  
  248.  
  249. xm.SimilarSitesCancel = function() {
  250.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  251.         getService(Ci.nsIFoxmarksService);
  252.     fms.datacancel();
  253. };
  254.  
  255. xm.FetchSimilarSites = function(url, text, spinner, callback) {
  256.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  257.         getService(Ci.nsIFoxmarksService);
  258.     XmarksDataServiceObserver.start(text, spinner, callback);
  259.     if (!fms.getSimilarSites(url)) {
  260.         callback({status: 2, msg: "Whoops! We're busy!" });
  261.     }
  262.     return true;
  263. };
  264.  
  265. xm.FetchProfileNames = function(text, spinner, menuPopup, callback) {
  266.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  267.         getService(Ci.nsIFoxmarksService);
  268.     XmarksServiceObserver.start(text, spinner, FetchProfileNamesCallback);
  269.     if (!fms.getProfileNames()) {
  270.         callback({status: 2, msg: "Whoops! We're busy!" });
  271.     }
  272.  
  273.     function FetchProfileNamesCallback(response) {
  274.         if (response.profiles) {
  275.             var profiles = response.profiles;
  276.             var count = 0;
  277.             for (var i = 1; i < menuPopup.childNodes.length; ++i) {
  278.                 if (profiles[String(i)]) {
  279.                     var name = profiles[String(i)];
  280.                     menuPopup.childNodes[i].label = name;
  281.                     menuPopup.childNodes[i].hidden = false;
  282.                     count++;
  283.                 } else {
  284.                     menuPopup.childNodes[i].hidden = true;
  285.                 }
  286.             }
  287.             if (callback) {
  288.                 callback({ status: response.status, count: count, 
  289.                         profiles: profiles });
  290.             }
  291.         }
  292.     }
  293. };
  294.  
  295. xm.VerifyPINStatus = function(pin, text, spinner, callback) {
  296.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  297.         getService(Ci.nsIFoxmarksService);
  298.     XmarksServiceObserver.start(text, spinner, callback);
  299.     fms.verifypin(pin);
  300. };
  301.  
  302. xm.FetchAccountStatus = function(syncType, text, spinner, callback) {
  303.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  304.         getService(Ci.nsIFoxmarksService);
  305.     XmarksServiceObserver.start(text, spinner, callback);
  306.     try {
  307.         fms.status(syncType);
  308.     } catch (e) {
  309.         Xmarks.LogWrite("FetchAccountStatus failed: " + e.toSource());
  310.         callback(typeof(e) == "number" ? e : 4);
  311.     }
  312. };
  313.  
  314. xm.FetchRevision = function(rev,callback) {
  315.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  316.         getService(Ci.nsIFoxmarksService);
  317.     XmarksServiceObserver.start("", null, callback);
  318.     fms.getrevision(rev);
  319. };
  320.  
  321. xm.FetchRevisions = function(callback) {
  322.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  323.         getService(Ci.nsIFoxmarksService);
  324.     XmarksServiceObserver.start("", null, callback);
  325.     fms.getrevisions();
  326. };
  327. xm.FetchAccountExtStatus = function(syncType, text, spinner, callback) {
  328.     var fms = Cc["@foxcloud.com/extensions/foxmarks;1"].
  329.         getService(Ci.nsIFoxmarksService);
  330.     XmarksServiceObserver.start(text, spinner, callback);
  331.     fms.extstatus(syncType);
  332. };
  333.  
  334. var inputTimer;
  335. xm.handlePasswordMeter = function(id){
  336.     if(inputTimer){
  337.         window.clearTimeout(inputTimer);
  338.         inputTimer = undefined;
  339.     }
  340.  
  341.     inputTimer = window.setTimeout(function(){
  342.         var txt = document.getElementById(id).value;
  343.         var result = TestPassword(txt);
  344.  
  345.         if(result * 5 > 200 || result > 24){
  346.             result = 40;
  347.         }
  348.         document.getElementById('passwordmeter').width = result * 5;
  349.         if(txt.length < 4){
  350.             document.getElementById('passwordStrength').style.color = 
  351.                 "#333";
  352.             document.getElementById('passwordmeter').style.backgroundColor = 
  353.                 "#999";
  354.  
  355.             document.getElementById('passwordStrength').value =
  356.                 xm.Bundle().GetStringFromName("password.tooshort");
  357.         }
  358.         else if(result < 17){
  359.             document.getElementById('passwordStrength').value =
  360.                 xm.Bundle().GetStringFromName("password.weak");
  361.             document.getElementById('passwordStrength').style.color = 
  362.                 "#57040F";
  363.             document.getElementById('passwordmeter').style.backgroundColor = 
  364.                 "#57040F";
  365.         }
  366.         else if(result < 24){
  367.             document.getElementById('passwordStrength').value =
  368.                 xm.Bundle().GetStringFromName("password.good");
  369.             document.getElementById('passwordStrength').style.color = 
  370.                 "#ED9D2B";
  371.             document.getElementById('passwordmeter').style.backgroundColor = 
  372.                 "#ED9D2B";
  373.         }
  374.         else {
  375.             document.getElementById('passwordStrength').value =
  376.                 xm.Bundle().GetStringFromName("password.strong");
  377.             document.getElementById('passwordStrength').style.color = 
  378.                 "#2A911B";
  379.             document.getElementById('passwordmeter').style.backgroundColor = 
  380.                 "#2A911B";
  381.  
  382.         }
  383.         inputTimer = undefined;
  384.     }, 500);
  385. };
  386.  
  387. })();
  388.